// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.Collections;
// import java.util.List;
#pragma once
#include "../SQLExprImpl.h"
#include "../SQLReplaceable.h"

class SQLASTVisitor;

class SQLFlashbackExpr_Type
{
public:
  static SQLFlashbackExpr_Type_ptr SCN;
  static SQLFlashbackExpr_Type_ptr TIMESTAMP;
  string_ptr name;
  uint64_t mask;
  SQLFlashbackExpr_Type(uint64_t mask, string_ptr name);
};

class SQLFlashbackExpr : public SQLExprImpl, virtual public SQLReplaceable
{
public:
  SQLFlashbackExpr_Type_ptr type;
  SQLExpr_ptr expr;

  SQLFlashbackExpr();

  SQLFlashbackExpr(SQLFlashbackExpr_Type_ptr type, SQLExpr_ptr expr);
  SHAREDOBJECT(SQLFlashbackExpr);

  SQLFlashbackExpr_Type_ptr getType();

  void setType(SQLFlashbackExpr_Type_ptr type);

  SQLExpr_ptr getExpr();

  void setExpr(SQLExpr_ptr expr);

  //@Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

  //@Override
  void accept0(SQLASTVisitor_ptr visitor);

  //@Override
  SQLObject_list_ptr getChildren();

  virtual SQLObject_ptr clone();

  //@Override
  bool equals(Object_ptr o);

  //@Override
  int hashCode();
};
